English

谁先埋下“2000年炸弹”

1999-01-01 来源:光明日报 赵奂辉 我有话说

编者按:《激动人心:电脑史话》是青年学者赵奂辉撰写的一部电脑技术—文化史。该书以电脑每一阶段技术所具有的文化影响力为主线,描述了计算机在20世纪科学技术化、技术产业化、产品大众化这一史诗般的历程。这本书即将由浙江文艺出版社出版。经作者和出版社授权,从今天起,本报将独家摘发书中精彩部分,以飨读者。

作者简介:赵奂辉,女,1969年生,沈阳人,1997年获北京大学计算机博士学位,后进入中国科学院计算机网络信息中心工作,从事科学可视化、网络安全等方面的研究,担任中科院计算机网络中心公众开放科普讲座主讲。

新的一年又来了,千年臭虫也一步步向我们爬来。是谁埋下了这信息时代的“ 定时炸弹” 呢?她就是被誉为“ 软件之母” 的美国计算机科学家格莱斯·霍普女士。

人们习惯把计算机程序中的错误叫做“ 臭虫” (Bug),怎么捉也捉不干净。有一次,美国的“ 阿特拉斯火箭” 就因为在飞行程序中少加了一个连字符(-),火箭升空后开始翻滚,只得由地面遥控炸毁,损失1850万美元。1994年,当英特尔公司向全球发布“ 奔腾” 芯片时,被一位对英特尔有敌意的数学家指出有一个极微小的浮点运算的错误,它在每90亿次除法运算时才出现一次,此事首先通过因特网迅速传开,引起轩然大波,葛洛夫他们被迫把已发货的上百万个芯片回收,重新处理,这一90亿分之一的错误使英特尔公司付出了4.75亿美元的代价。但这些 “臭虫” 与“ 千年虫” 比起来,只能算是微不足道的毛毛虫了。据估计,要把目前全世界电脑中的“ 千年虫” 都捉干净,将要付出3000-6000亿美元的代价,这等于整个第二次世界大战人类财产损失的总和。这是人脑和电脑之间一场新的世界大战。凡事总有开头,那么,第一个“ 臭虫” 是在什么时候发现的呢?有人说是在人类第一台电脑“爱尼亚克”(ENIAC)上,其实不是,而是在一台叫“马克1号”的模拟计算机上。

在“爱尼亚克”问世之前,人们已研制出以电磁继电器为主的模拟计算机。其中最有名的要算哈佛大学研制的“马克1号”了。研制者是美国哈佛大学的应用数学教授霍华德·阿肯。“马克1号”长51英尺,高8英尺,看上去像一节列车,由750000个零部件组成,里面的各种导线加起来总长有500英里!总耗资四五十万美元。阿肯在研制过程中,有一位得力的助手,她就是格莱斯·霍普。格莱斯·霍普1906年生于纽约,1934年获耶鲁大学博士学位,后来加入阿肯小组。1943年,霍普在检测电路时,发现了一处异常情况,经过仔细的分析,她得出结论:在计算机程序中有一个编码错误,她把这一情况作了记录。世界上第一个“臭虫”就这样被发现了!

有意思的是,当时编制电脑程序的,几乎都是女士,从“马克1号”到“爱尼亚克”,编程小组中清一色是“娘子军”。第二次世界大战中,美军雇佣许多妇女用台式计算器算火力表,这些人就叫“计算员”(Computer)。一开始“计算机”不叫“Computer”,而是叫“计算器”(Calculator)。当时还没有“程序员”这一称呼,像霍普这样的编程人员也叫“计算员”(Computer)。这样说来,霍普还是第一位现代计算机的程序员。“马克1号”在1944年5月完工后,阿肯忙于海军部方面的事情以及机型改进的设计,“马克1号”的运行主要由霍普负责。霍普完成了电脑史上第一个编译器,能把高级程序设计语言书写的程序转换为计算机能直接执行的机器语言。

1949年霍普被“爱尼亚克”的总设计师埃克特看中,离开哈佛大学,进入埃克特和莫齐利创办的世界上第一家电脑公司埃克特—莫齐利电脑公司,担任“尤尼法克”(UNIVAC)和“比尼亚克”(BINAC)的程序总设计师。在莫齐利的指点下,霍普开始在编程中使用“简短指令代码”。到了50年代中期,霍普又开发出Flow-Matic语言,起初是针对“尤尼法克”1型和2型电脑的商业数据处理用的。这是第一个用于商业数据处理的类似英语的语言。后来Flow-Matic语言又经改进成为COBOL语言,于1959年问世,它是第一批开发出来的高级程序设计语言之一,广泛用于大型机和小型机电脑的高级商业程序设计。

在50年代,商用大型机刚开始普及时,价格是非常昂贵的。IBM公司为“半自动地面环境”承建的36台电脑,总售价高达7亿多美元。相应的存储设备也非常昂贵,1957年,IBM在“兰马克”电脑上,装配的世界上第一个容量为5兆的磁盘,每年的租金就要35000美元,算起来,每兆内存的年租费为7000美元。在我们今天看来是无法想象的,因为现在个人电脑存储系统中,每兆(MB)信息的存储费用只有0.25美分!60年代初,当《数字化生存》的作者尼葛洛庞蒂在麻省理工学院刚念大学时,每一比特(位)内存的平均价格为1美元,可以想象,1KB就要将近9000美元(8X1024),那1兆呢?当时的许多电脑的内存不是以兆而是可怜到以多少个字来算的,霍普负责软件编制的“尤尼法克”(UNIVAC)内存只有1000个字。在这么狭小的地方编程,真好比是“螺丝壳里做道场”,霍普女士真是心细如发,连每个字符都要精打细算。中国古代文人写文章崇尚简约,讲究“章无赘句,句无赘字”,这样才能“一字千金”。霍普的功夫也确实了得,在内存资源有限又昂贵的情况下,她只能追求精简,否则,多一字符,真的要多费“千金”。为了节省内存,她开始采用6位数来表示具体的日期,也即年、月、日各两位,按英文的习惯,表示为DD/MM/YY,比如说是1960年12月25日,就简化为25/12/60。随着她主持开发的COBOL语言影响日益扩大,上述简写就成为标准写法。其他电脑语言也如此仿效,多数电脑硬件所提供的系统日期也这样表示。从50年代开始,代代相传。即使到了70年代末80年代初,随着虚拟存储技术的普及,电脑的内存越来越大时,这一6位表示法一直沿用下来。谁也没有想到2000年1月1日时,电脑上的日期会变为01/01/00,从而造成1999年12月31日(31/12/99)在日期上会比新世纪的第一天大出100年的怪事。当80年代中期人们意识到这一可怕的疏漏时,并在新的电脑系统上改用4位数表示年份,但亡羊补牢已晚了。许多要害部门如核武器库、航空航天、金融保险等等恰恰是最早用电脑的,六七十年代甚至50年代的大型机至今还在运转,在2000年到来之际,在金融、保险行业会引起利息、保险金的误算,在航空、航天、航海、铁路甚至核武器系统引起一系列的严重问题。这就是电脑2000年问题的由来。

70年代,霍普又进入军界,主持软件开发。她的努力使电脑在商用化和产业化方面取得长足的进步。霍普一直在美军服役,到80年代中期,当年聪明伶俐的女中尉已成为威严持重、受人尊敬的海军准将。在电脑软件的进展中,格莱斯·霍普女士做出了巨大的贡献。她在现代计算机领域有四项第一:第一个女程序员,发明第一个编译器,发现第一个“臭虫”,创建第一个有深远影响的商用计算机语言。缘此,她被国际计算机界称为“软件之母”。为了纪念这位现代计算机软件的开创者,国际上设立了著名的“霍普奖”。

20世纪逐渐老去,我们盼望已久的21世纪的钟声竟会带来那么一个可怕的“礼物”。1992年,格莱斯·霍普去世,那时候2000年问题已开始沸沸扬扬,这位电脑软件伟大而智慧的母亲,不知会怎么想?

手机光明网

光明网版权所有

光明日报社概况 | 关于光明网 | 报网动态 | 联系我们 | 法律声明 | 光明网邮箱 | 网站地图

光明网版权所有